generated at
✅空リンクも取得出来るようにする | external-completion
取得する外部project linkに、空リンクを含めたい
実装
非同期処理
各projectの取得は await で同期処理にする
各projectのfetchを並列に走らせて、それらの Promise Promise.all でまとめる
done2020-09-03 08:16:19 意外と簡単にできた
2020-09-05 22:01:27 どこからもリンクされていないページのタイトルが補完候補に挙がってこないことに気づいた
links だけでなく、 title もリストに加えるように修正する

script.js
async _importLinks() { return this.projects.map(project => this._fetchAllLinks(project) .then(links => { links.forEach(link => this.links.push(`/${project}/${link}`)); return links.length; }) .then(length => console.log(`Loaded ${length} links from /${project}`)) ); } async _fetchAllLinks(projectName) { let followingId = null; let result =[]; console.log(`Start loading links from ${projectName}...`); while (true) { await (!followingId ? fetch(`/api/pages/${projectName}/search/titles`) : fetch(`/api/pages/${projectName}/search/titles?followingId=${followingId}`)) .then(res => { followingId = res.headers.get('X-Following-Id'); return res.json(); }) .then(json => json.map(page => [...page.links, page.title]) .reduce((links, cur) => [...links, ...cur])) .then(links => result = [...result, ...links]); if(!followingId) break; console.log(`Loading links from ${projectName}: followingId = ${followingId}`); } console.log(`Finish loading links from ${projectName}.`); //重複を取り除く return [...new Set(result)]; }